package io.netty.client.core.handler;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.client.core.exception.BrokenChannelException;
import lombok.extern.slf4j.Slf4j;

/**
 * 全局异常处理.
 */
@Slf4j
public class GlobalExceptionHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {

        //链路异常不一定是socket本身的异常，可能是上游handler程序本身处理逻辑不完善而抛出的异常

        log.error("channel exception！channel:{}", ctx.channel(), cause);
        //只有是socket本身状态异常引发的异常才去close链路
        if (cause instanceof BrokenChannelException) {
            log.warn("心跳过程异常，链路触发关闭！channel:{}", ctx.channel());
            ctx.close();
        }
    }

}
